package com.cpd.blog.manager.manager;

import com.cpd.blog.dto.Article.Archives;
import com.cpd.blog.dto.Article.ArticleRep;
import com.cpd.blog.dto.Article.TagVo;
import com.cpd.blog.dto.Page.PageParams;
import com.cpd.blog.entity.Article;
import com.cpd.blog.entity.ArticleBody;

import java.util.List;

/**
 * @Author: Copydown
 * @Date: 2022/04/30/2:29
 */
public interface ArticleManager {
    /**
     * 根据 文章ID 删除与该文章相关联的所有信息
     *
     * @param articleId articleId
     * @return boolean
     */
    boolean deleteArticleRelateById(Long articleId);

    /**
     * 根据 文章请求对象 更新文章相关联的所有内容
     *
     * @param article     article
     * @param articleBody articleBody
     * @param tagList     tagList
     * @return ArticleRep
     */
    ArticleRep updateArticleWithRelate(Article article, ArticleBody articleBody, List<TagVo> tagList);

    /**
     * 分页查询文章列表
     *
     * @param pageParams pageParams
     * @return List<Article>
     */
    List<Article> listArticle(PageParams pageParams);

    /**
     * 根据当前的 User 查询其名下所有文章
     *
     * @param pageParams pageParams
     * @param userId     userId
     * @return List<Article>
     */
    List<Article> listUserArticle(PageParams pageParams, Long userId);

    /**
     * 根据 文章Id 查询文章
     *
     * @param articleId articleId
     * @return Article
     */
    Article findArticleById(Long articleId);

    /**
     * 查询所有文章状态，让新文章变旧
     * @return
     */
    int refreshNewArticle();

    /**
     * 文章归档查询
     * @return
     */
    List<Archives> listArchives();
}
